/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tetris_invader.personagens;

import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import tetris_invader.util.Fase;

/**
 * Cria instancias dos personagens o os retorna. Tambem contem uma lista de
 * todos os personagens fabricaveis
 */
public abstract class Fabrica {

    public enum TipoPersonagem {

        NAVE, INVASOR_EASY, INVASOR_MEDIUM, INVASOR_HARD;
    }

    private Fabrica() {
    }

    /**
     * Metodo estatico<br>
     * Retorna uma instancia do tipo de personagem passado no parametro.
     * @param tipo Tipo do personagem que se quer fabricar
     * @param f fase onde se esta fabricando o personagem
     * @return Instacia do personagem criado. Retorna nulo se o personagem nao
     * fazer parte da lista de personagens fabricaveis
     */
    public static Personagem Factory(TipoPersonagem tipo, Fase f) {

        if (tipo == TipoPersonagem.NAVE) {
            Image[] imagens = new Image[1];
            String filename = "/images/Nave.png";
            URL url = Fabrica.class.getResource(filename);
            imagens[0] = Toolkit.getDefaultToolkit().getImage(url);
            imagens[0] = imagens[0].getScaledInstance(40, 40, 1);

            return new Nave(f, imagens, 100);

        } else if (tipo == TipoPersonagem.INVASOR_EASY) {
            Image[] imagens = new Image[7];
            for (int i = 0; i < imagens.length; i++) {
                String filename = "/images/invaders/easy (" + (i + 1) + ").png";
                URL url = Fabrica.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
                imagens[i] = imagens[i].getScaledInstance(24, 16, 1);
            }
            return new Invasor_Easy(f, imagens, 200);

        } else if (tipo == TipoPersonagem.INVASOR_MEDIUM) {
            Image[] imagens = new Image[7];
            for (int i = 0; i < imagens.length; i++) {
                String filename = "/images/invaders/medium (" + (i + 1) + ").png";
                URL url = Fabrica.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
                imagens[i] = imagens[i].getScaledInstance(24, 16, 1);
            }
            return new Invasor_Medium(f, imagens, 200);

        } else if (tipo == TipoPersonagem.INVASOR_HARD) {
            Image[] imagens = new Image[7];
            for (int i = 0; i < imagens.length; i++) {
                String filename = "/images/invaders/hard (" + (i + 1) + ").png";
                URL url = Fabrica.class.getResource(filename);
                imagens[i] = Toolkit.getDefaultToolkit().getImage(url);
                imagens[i] = imagens[i].getScaledInstance(24, 16, 1);
            }
            return new Invasor_Hard(f, imagens, 200);
        }

        return null;
    }
}
